/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tarea2.managedbeans;

import Negocio.InterfazNegocio;
import entidades.Administrador;
import entidades.Administrativo;
import entidades.ListaDeEspera;
import entidades.Medico;
import entidades.Mensaje;
import entidades.Mensaje.Tipo;
import entidades.Paciente;
import entidades.Tratamiento;
import entidades.Usuario;
import entidades.Usuario_;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

/**
 *
 * @author Samuel Lehotský <lehotsky at atlas dot sk>
 */
@Named(value = "mensajesMBean")
@RequestScoped
public class MensajesMBean implements Serializable {

    private Usuario emisor;
    private String dni;
    private Tipo messageType;
    private String texto;
    @Inject
    private UsuarioMBean usuarioBean;
    @Inject
    private InterfazNegocio negocio;

    /**
     * Creates a new instance of MensajesMBean
     */
    public MensajesMBean() {
    }

    @PostConstruct
    public void init() {
        messageType = Tipo.mensaje;
        emisor = usuarioBean.getUsuario();
    }

    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public Tipo getMessageType() {
        return messageType;
    }

    public void setMessageType(Tipo messageType) {
        this.messageType = messageType;
    }

    public String getTexto() {
        return texto;
    }

    public void setTexto(String texto) {
        this.texto = texto;
    }

    public List<Tipo> getAllMessageTypes() {
        List<Tipo> ret = new LinkedList<>();
        for (Tipo t : Mensaje.Tipo.values()) {
            //solo pacientes se pueden quejar
            if (t == Tipo.queja && !(emisor instanceof Paciente)) {
                continue;
            }
            //solo doctores pueden crear alertas
            if (t == Tipo.alerta && !(emisor instanceof Medico)) {
                continue;
            }
            ret.add(t);
        }
        return ret;
    }

    public List<Usuario> getPossibleRecipients() {
        return negocio.getPossibleRecipients(emisor.getClass());
    }

    public Usuario getEmisor() {
        return emisor;
    }

    public void setEmisor(Usuario emisor) {
        this.emisor = emisor;
    }

    public UsuarioMBean getUsuarioBean() {
        return usuarioBean;
    }

    public void setUsuarioBean(UsuarioMBean usuarioBean) {
        this.usuarioBean = usuarioBean;
    }

    public String sendMessage() {
        Mensaje m = new Mensaje();
        m.setCuerpo(texto);
        m.setTipo(messageType);
        m.setEmisor(emisor);
        if (messageType == Tipo.queja) {
            negocio.mandar_mensaje(m, null);
        } else {
            negocio.mandar_mensaje(m, dni);
        }

        //TODO osetrenie chyby

        return usuarioBean.mensajesEnviados();
    }

    public String deleteRecibido(Long id) {
        negocio.eliminar_recibido(id, emisor);
        return usuarioBean.mensajesRecibidos();
    }

    public String deleteEnviado(Long id) {
        negocio.eliminar_enviado(id, emisor);
        return usuarioBean.mensajesEnviados();
    }

    public String deleteQueja(Long id) {        
        negocio.eliminar_queja(id, emisor);
        return usuarioBean.mensajesQuejas();
    }

    public List<Mensaje> getQuejas() {
        ArrayList ret = new ArrayList<>();
        ret.addAll(negocio.getQuejas(emisor));
        return ret;
    }
    
    public List<Mensaje> getRecibidos() {
        ArrayList ret = new ArrayList<>();
        ret.addAll(negocio.getRecibidos(emisor));
        return ret;
    }
    
    public List<Mensaje> getEnviados() {
        ArrayList ret = new ArrayList<>();
        ret.addAll(negocio.getEnviados(emisor));
        return ret;
    }

    public InterfazNegocio getNegocio() {
        return negocio;
    }

    public void setNegocio(InterfazNegocio negocio) {
        this.negocio = negocio;
    }
    
}
